A synchronization endpoint may be implemented on a processing device and may represent various data stores or devices that may include, but are not limited to, computers, notebook computers, personal digital assistants, cellular telephones or other wireless devices, a folder on a storage device having one or more files, a group of memory locations in a memory, server computers, online services, any other device or container to which data may be electronically stored or from which data may be electronically retrieved, or any combination thereof. A sync community may be a group of synchronization endpoints, which may synchronize with one another. In a two-way multi-master synchronization topology, pairs of synchronization endpoints may synchronize data with one another in a manner in which a first synchronization endpoint of a pair of synchronization endpoints may request synchronization with a second synchronization endpoint of the pair of synchronization endpoints and the second synchronization endpoint may request synchronization with the first synchronization endpoint. In a two-way multi-master synchronization topology, concurrent or nearly concurrent modifications may be made to a particular data item at different endpoints, such that a conflict may occur when the endpoints attempt to synchronize.
Existing synchronization applications use a number of techniques for resolving conflicts. Some synchronization applications resolve conflicts by displaying a user interface (UI) at synchronization time and requiring a user to select a conflict resolution. The drawback to this approach is that users are forced to be present during the synchronization process so that they may respond to the UI or risk not completing the synchronization process. Other synchronization applications defer conflict resolution and permit a user to resolve the conflict resolution via a UI at a later time. In some situations, the deferred conflict resolution may never be resolved because the conflict may be detected on an endpoint that does not have facilities for resolving conflicts. Other synchronization applications may implement automatic conflict resolution policies. For example, a synchronization application may resolve a conflict by always choosing a revision with a later write time as a winner of the conflict. In such a synchronization application, the discarded revision may be saved for an undo operation, which, when performed, may cause the discarded revision to be declared the winner of the conflict and may revise the data accordingly. However, a disadvantage to such a synchronization application is that the undo operation acts as a new revision to an item instead of unwinding one or more actions performed on the item.